package cn.tedu.img.service;

import com.jt.common.utils.UUIDUtil;
import com.jt.common.utils.UploadUtil;
import com.jt.common.vo.PicUploadResult;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;

@Service
public class PicService {
    public PicUploadResult upload(MultipartFile pic) {
        // 图片上传流程
        // 1. 对上传的文件做校验是否合法
        //     1.1 判断后缀是否属于图片 jpg,png,gif,tga...
        // 2. 生成存储路径 D:/static/upload/1/d/d/3/d/3/d/3/
        // 3. 图片重命名，防止上传同一个图片名称(防止同名覆盖), 存储到文件夹
        //     D:/static/upload/1/d/d/3/d/3/d/3/重命名.png
        // 4. 生成对应可以访问到该文件的url地址，通过nginx静态访问
        //     http://image.it.com/upload/1/d/d/3/d/3/d/3/重命名.png
        // 5. 封装数据，返回对象url包装返回给ajax使用
        // 整个流程过程任何一个位置出现异常，都会导致图片上传失败

        PicUploadResult result = new PicUploadResult();

        try {
            // 从pic参数中拿到文件原名称，解析后缀，判断是否是图片后缀
            String oName = pic.getOriginalFilename();
            // 截取后缀
            String extName = oName.substring(oName.lastIndexOf("."));
            // 判断后缀
            if (!extName.matches(".(png|gif|jpg|tga)$")) {
                // 说明后缀截取的值不满足要求，不是图片，不合法
                result.setError(1);
                return result;
            }
            // 根据图片，生成一个多级路径upload/1/d/3/d/3/d/3/d/，调用一个工具类
            String dir = UploadUtil.getUploadPath(oName, "upload");
            // 根据生成的dir，创建D:/static/upload/1/d/3/d/3/d/3/d/
            String path = "C:/tedu/practice/java_ee/upload_static_files/" + dir + "/";
            File _dir = new File(path);//代表文件夹内存对象
            // 如果没有这个文件夹需要创建多级目录
            if (!_dir.exists()) {
                _dir.mkdirs();
            }
            // 重命名图片，存储图片到多及目录下
            String nName = UUIDUtil.getUUID() + extName;// 3kd3-3md23dk434dfs23-3.jpg
            pic.transferTo(new File(path + nName));
            // 根据上传的图片，生成可以访问图片的url
            String url = "http://image.jt.com/" + dir + "/" + nName;
            result.setUrl(url);
            return result;
        } catch (Exception e) {
            e.printStackTrace();
            // 出现异常，上传失败
            result.setError(1);
            return result;
        }
    }
}
